package com.fs.leetcode.shuzu.sum.remove;
/**
 * 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序
 * @author huyunqiang
 * @Date 2019/12/26 18:06
 */

public class Solution {

    /**
     * 将所有为0的数据后移 continue
     * @param nums
     * @param val
     * @return
     */
    public static int removeElement(int[] nums, int val) {
        int idx = 0;
        for (int num : nums) {
            if (num == val) {
                continue;
            }
            nums[idx] = num;
            idx++;
        }
        return idx;
    }

    public static int removeElement1(int[] nums, int val) {
        int idx = 0;
        int n = nums.length;
        while (idx < n) {
            if (nums[idx] == val) {
                nums[idx] = nums[n - 1];
                n--; // 此处，非常关键，减小的是 n ，而 idx 没有增加，那么 while 下一轮，就会判断此处的 nums[n - 1] 是否也有可能等于 val
            } else {
                idx++;
            }
        }

        return n;
    }

    /**
     * 移除数组中相同的数字
     * @param nums
     * @return
     */
    public static int removeDuplicates(int[] nums) {
        if(nums.length == 0){
            return 0;
        }

        int index = 0;
        for(int i: nums){
            if(nums[i] == nums[i-1]){
                continue;
            }
            nums[index] = nums[i];
            index ++;
        }
        return index;
    }

    /**
     * [0,0,0,1,1,1,]
     * 0,1 数组计算连续出现 1 的次数
     * @param nums
     * @return
     * 思路： 定义两个变量： count, max 如果 是0 count = 0; 是1 count+1 在比较max 和count的大小
     */
    public int findMaxConsecutiveOnes(int[] nums) {
        int max = 0;
        int counts = 0; // 计数当前序列，有多少个 1 。
        for (int num : nums) {
            if (num == 0) {
                counts = 0;
            } else {
                // 计数++
                counts++;
                // 判断是否最大
                if (counts > max) {
                    max = counts;
                }
            }
        }
        return max;
    }

    public static void main(String[] args) {
        int[] arr=new int[]{0,1,0,3,12};
//        removeElement(arr,0);
        removeElement1(arr,0);
        for(int i:arr){
            System.out.println(i);
        }
    }

}
